package com.anlu.concurrent.ch5.bitwise;

/**
 * <p>
 * Description:TODO 详细描述
 * <p>
 * Copyright: 天津联想协同科技有限公司
 * <p>
 *
 * @author anlu
 * @date 2021/10/27 16:02
 */
public class Permission {

    /**
     *  是否允许查询，二进制第一位，0表示否，1表示是   0001  = 1
     */
    public static final int ALLOW_SELECTED = 1 << 0;

    /**
     * 是否允许新增，二进制第2位，0表示否，1表示是  0010  = 2
     */
    public static final int ALLOW_INSERT = 1 << 1;
    /**
     * 是否允许修改，二进制第3位，0表示否，1表示是 0100  =4
     */
    public static  final int ALLOW_UPDATE = 1 << 2;

    /**
     * 是否允许删除，二进制第4位，0表示否，1表示是 1000  = 8
     */
    public static  final  int ALLOW_DELETE = 1<< 3;
    /**
     * 存储目前权限的状态
     */
    private int flag;
    /**
     * 设置用户权限
     * @param per
     * @author: anlu
     * @time: 2021/10/27
     */
    public void setPer(int per){
        flag = per;
    }

    /**
     * 增加用户权限（1个或者多个）
     * @param per
     */
    public void enable(int per){
        flag = flag|per;
    }

    /**
     * 删除用户权限
     * @param per
     */
    public void disable(int per){
        flag = flag&~per;
    }

    /**
     * 判断用户的权限
     * @param per
     * @author: anlu
     * @time: 2021/10/27
     */
    public boolean isAllow(int per){
        return ((flag&per) == per);
    }

    /**
     * 判断用户没有的权限
     * @param per
     * @return
     */
    public boolean isNotAllow(int per){
        return ((flag&per) == 0);
    }

    public static void main(String[] args) {
        int flag = 15;
        Permission permission = new Permission();
        permission.setPer(flag);
        permission.disable(ALLOW_DELETE|ALLOW_INSERT);
        System.out.println("select = "+permission.isAllow(ALLOW_SELECTED));
        System.out.println("update = "+permission.isAllow(ALLOW_UPDATE));
        System.out.println("insert = "+permission.isAllow(ALLOW_INSERT));
        System.out.println("delete = "+permission.isAllow(ALLOW_DELETE));
    }
}
